import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
import java.lang.Math.*;

/**
 * Write a description of class Ladron here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class Ladron extends AnimaActor
{
    private Actor colicionCarro;
    private Actor colicionPeaton;
    private Actor colicionTronco;
    private Actor colicionEnd;
    private Actor colisionAlcantarilla;
    private Actor colicionArma;
    private Actor colicionGas;
    private int vSpeed = 0;
    private int ima=0;
    private int aceleracion = 2;
    private int n,cont;
    private needle need;
           
    public Ladron(needle ned)
    {
      // super("fugitive",".png",16); 
        need = ned;
        n=5;
        cont=0;
    }
    
    public void act() 
    {
        World mundo = getWorld();
        if(((Mundo)mundo).dameSpeedScroll() <= 5)
        n=1;
        if(((Mundo)mundo).dameSpeedScroll() == 6)
        n=2;
        if(((Mundo)mundo).dameSpeedScroll() == 7)
        n=2;
        if(((Mundo)mundo).dameSpeedScroll() >= 8)
        n=3;
        
        limite();
        Aceleracion();
        mueve();
        ChecaCollision();
    }
    
    public void Aceleracion()
    {
        World mundo = getWorld();
        cont++;
        if(cont == 50 && mueve())
        {
            cont = 0;
            ((Mundo)mundo).cambiaSpeedScroll(((Mundo)mundo).dameSpeedScroll()+1); 
        }
        
        if(((Mundo)mundo).dameSpeedScroll() == 10)
            ((Mundo)mundo).cambiaSpeedScroll(11);
            
        if(((Mundo)mundo).dameSpeedScroll() == 11)
            ((Mundo)mundo).cambiaSpeedScroll(10);
            
        if(((Mundo)mundo).dameSpeedScroll() == 16)
            ((Mundo)mundo).cambiaSpeedScroll(9);
            
        if(!Greenfoot.isKeyDown("a"))
            ((Mundo)mundo).cambiaSpeedScroll(0);
            
       switch(((Mundo)mundo).dameSpeedScroll())
        {
            case 0:
                need.set(2);
            break;
            case 1:
                need.set(2.3);
            break;
            case 2:
                need.set(2.6);
            break;
            case 3:
                need.set(3);
            break;
            case 4:
                need.set(3.3);
            break;
            case 5:
                need.set(3.6);
            break;
            case 6:
                need.set(4);
            break;
            case 7:
                need.set(4.3);
            break;
            case 8:
                need.set(4.6);
            break;
            case 9:
                need.set(5);
            break;
            case 10:
                need.set(5.3);
            break;
            case 11:
                need.set(5.6);
            break;
            case 12:
                need.set(6);
            break;
            
            
        }
    }
    
    private void hacerTurbinas()
    {
        getWorld().addObject(new Turbe(), getX() - 65, getY()+40);
        getWorld().addObject(new Turbe(), getX() - 75, getY()+30);
    }
    public void limite()
    {
        int x =super.getX();
        int y =super.getY();
        
        World mundo =super.getWorld();
        //largo del mundo getWidth
        int ancho = mundo.getWidth();
        // Ancho del mundo getHeight
        int altura = mundo.getHeight();
        
        if(x >= ancho-100)
            setLocation(x-20,getY());
        if(x <= 100)
            setLocation(x+20,getY());
        if(y >=altura-120)
            setLocation(getX(),y-10);
        if(y <= 180)
            setLocation(getX(),y+10);
    }
    
     /**
    * metodo utilizado para mover al personaje por el mundo
    * siempre y cuando se tenga precionado la tecla space
    */
   public boolean  mueve()
   {
   
       World mundo=getWorld();
 
    int banderaScroll =2;
    if (Greenfoot.isKeyDown("a"))
        {    
            ima++;
            if(ima>4)
               ima=1;
               cambia(ima);
            if (Greenfoot.isKeyDown("up") ) {
            setLocation (getX(), getY() - n);
            setImage("ladronizq.png");
            }
            
            if (Greenfoot.isKeyDown("down") ) {
            setLocation (getX(), getY() + n);
            setImage("ladronder1.png");
            }
            if (Greenfoot.isKeyDown("left") ) {
            setLocation (getX()-n, getY());
            
          
            }
            if (Greenfoot.isKeyDown("right") ) {
            setLocation (getX()+n, getY());
            
     
            }
         
            if("d".equals(Greenfoot.getKey()))
            {
             fuego();
             
            }
      
            if (Greenfoot.isKeyDown("s") ) {
            setLocation (getX()+3, getY());
            ((Mundo)mundo).cambiaSpeedScroll(15);
            hacerTurbinas();
            banderaScroll=1;
         
            if (Greenfoot.isKeyDown("left") ) {
            setLocation (getX()-5, getY());
            }
              
            
            }
            if(banderaScroll==0)
            {
               ((Mundo)mundo).cambiaSpeedScroll(10);
               banderaScroll=1;
            }
          
        }
        
        return true;
    }
    
    public void fuego()
    {
        World mundo=getWorld();
        if(((Mundo)mundo).dameNumbalas()>0)
        {
            Disparo bala=new Disparo();
            getWorld().addObject(bala,getX(),getY());
            ((Mundo)mundo).cambiaNumbalas(((Mundo)mundo).dameNumbalas()-1);
        }
    }
    
    public void cambia(int m)
    {
        switch(m)
        {
            case 0:
                    setImage("ladron.png");
                    break;
            case 1:
                    setImage("ladron01.png");
                    break;
            case 2:
                    setImage("ladron001.png");
                    break;
            case 3:
                    setImage("ladron1.png");
                    break;
        }
        
    }
    
    public void ChecaCollision()
    {

        colicionCarro = getOneIntersectingObject(CarroObs.class);
        colicionPeaton = getOneIntersectingObject(Peaton.class);
        colicionTronco = getOneIntersectingObject(Tronco.class);
        colicionArma = getOneIntersectingObject(Arma.class);
        colicionEnd = getOneIntersectingObject(Meta.class);
        colisionAlcantarilla=getOneIntersectingObject(Alcantarilla.class);
       
        World mundo = (World)getWorld();
        int d=((Mundo)mundo).dameDano();
        int s=((Mundo)mundo).dameScore();
        int b=((Mundo)mundo).dameNumbalas();
        int a=((Mundo)mundo).dameNivel();
        //((colicionPoli = getOneObjectAtOffset(70,-40,Policia.class);
        if(colicionPeaton!=null )
        {
           colicionPeaton = getOneObjectAtOffset(40,-40,Peaton.class);
            if(colicionPeaton !=null)
            {
                ((Peaton)colicionPeaton).explota();
                Greenfoot.playSound("bonos.mp3");
                setLocation(getX(),getY());
                ((Mundo)mundo).cambiaScore(s+25);
                ((Mundo)mundo).cambiaSpeedScroll(((Mundo)mundo).dameSpeedScroll()-3);
            }
        
            else
            {
                mundo.setPaintOrder(Peaton.class,Ladron.class);
        
            }
        }
        
        /*if(colicionGas!=null )
        {
           colicionGas = getOneObjectAtOffset(40,-40,Gas.class);
            if(colicionGas !=null)
            {
                ((Gas)colicionGas).explota();
                Greenfoot.playSound("bonos.mp3");
                setLocation(getX(),getY());
                ((Mundo)mundo).cambiaScore(s+25);
                if( ((Mundo)mundo).dameDano()+10<=100)
                    ((Mundo)mundo).cambiaDano(d+10);
                    getWorld().removeObject(colicionGas);
            }
        
            else
            {
                mundo.setPaintOrder(Gas.class,Ladron.class);
        
            }
        }*/
        
        if(colicionEnd!=null)
        {
            ((Mundo)mundo).cambiaGanaste(1);
            ((Mundo)mundo).cambiaNivel(((Mundo)mundo).dameNivel()+1);
            getWorld().removeObject(colicionEnd);
            
            
        }
        
       if(colicionTronco!=null)
        {
            ((Tronco)colicionTronco).explota();
            Greenfoot.playSound("ooh.mp3");
            setLocation(getX()-30,getY());
            //((Mundo)mundo).cambiaDano(d-5);
            ((Mundo)mundo).cambiaSpeedScroll(((Mundo)mundo).dameSpeedScroll()-3);
            
        }
        
        if(colicionCarro != null)
        {
            ((CarroObs)colicionCarro).explota();
            Greenfoot.playSound("explosion.mp3");
            setLocation(getX()-50,getY());
            //((Mundo)mundo).cambiaDano(d-20);
            ((Mundo)mundo).cambiaSpeedScroll(((Mundo)mundo).dameSpeedScroll()-3);
            
        }
        
        
        if(colicionArma !=null)
        {
            
            Greenfoot.playSound("bonos.mp3");
            ((Mundo)mundo).cambiaNumbalas(b+1);
            getWorld().removeObject(colicionArma);
        }
        
        if(colisionAlcantarilla!=null)
        {
            Greenfoot.playSound("ooh.mp3");
            ((Mundo)mundo).cambiaScore(s-10);
            getWorld().removeObject(colisionAlcantarilla);
         
        }
        
       colicionGas=getOneIntersectingObject(Gas.class);
        
        if (colicionGas != null)
        {
          
            Greenfoot.playSound("bonos.mp3");
            if( ((Mundo)mundo).dameDano()+10<=100)
                ((Mundo)mundo).cambiaDano(d+10);
            getWorld().removeObject(colicionGas);
        } 
        
       
    }
}
